package wodegua.d29_多线程;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * 第二题:分析以下需求，并用代码实现
 * 训练目标:掌握java中多线程基本使用
 * 需求描述:
 *  有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池中的奖项为 {10,5,20,50,100,200,500,800,2,80,300,700};
 *  创建两个抽奖箱(线程)设置线程名称分别为“抽奖箱1”,“抽奖箱2”，随机从抽奖池中获取奖项元素并打印在控制台上,格式如下:
 *
 *  1.每次抽出一个奖项就打印一个(随机)
 * 抽奖箱1 又产生了一个 10 元大奖
 * 抽奖箱1 又产生了一个 100 元大奖
 * 抽奖箱1 又产生了一个 200 元大奖
 * 抽奖箱1 又产生了一个 800 元大奖
 * 抽奖箱2 又产生了一个 700 元大奖
 */
public class d11_ThreadDemo2 {
    public static void main(String[] args) {
        int[] prizeArray = {10, 5, 20, 50, 100, 200, 500, 800, 2, 80, 300, 700};

        List<Integer> prize = new ArrayList<>();
        for (int j : prizeArray) {
            prize.add(j);
        }

        Thread l1 = new Lottery(prize);
        Thread l2 = new Lottery(prize);

       Thread c1 = new Thread(l1,"抽奖箱1");
       Thread c2 = new Thread(l2,"抽奖箱2");

       c1.start();
       c2.start();

    }
}

class Lottery extends Thread{
    private final List<Integer> prize;

    public Lottery(List<Integer> prize) {
        this.prize = prize;
    }

    @Override
    public void run() {
        String name = Thread.currentThread().getName();
        while (true) {
            synchronized (prize) {
                if (prize.size() <= 0) {
                    break;
                }
                Random r = new Random();
                int number = r.nextInt(prize.size());
                int p = prize.remove(number);
                System.out.println(name + " 又产生了一个 " + p + " 元大奖");
            }
        }
    }
}